home *** CD-ROM | disk | FTP | other *** search
- TABLE OF CONTENTS
-
- Group.mui/Group.mui
- Group.mui/MUIA_Group_ActivePage
- Group.mui/MUIA_Group_Child
- Group.mui/MUIA_Group_ChildList
- Group.mui/MUIA_Group_Columns
- Group.mui/MUIA_Group_Horiz
- Group.mui/MUIA_Group_HorizSpacing
- Group.mui/MUIA_Group_LayoutHook
- Group.mui/MUIA_Group_PageMode
- Group.mui/MUIA_Group_Rows
- Group.mui/MUIA_Group_SameHeight
- Group.mui/MUIA_Group_SameSize
- Group.mui/MUIA_Group_SameWidth
- Group.mui/MUIA_Group_Spacing
- Group.mui/MUIA_Group_VertSpacing
- Group.mui/MUIM_Group_ExitChange
- Group.mui/MUIM_Group_InitChange
- Group.mui/MUIM_Group_Sort
- Group.mui/Group.mui
-
- Group class is responsible for the complete layout
- of a MUI window. A group may contain any number of
- child objects, maybe buttons, cycle gadgets or
- even other groups.
-
- Some attributes of group class define how the children
- of a group are layouted. You can e.g. tell your group
- to place its children horizontally (in a row) or
- vertically (in a column). Since every MUI object knows
- about its minimum and maximum dimensions, group class
- has everything it needs to do that job.
-
- More sophisticated layout is possible by assigning
- different weights to objects in a group or by
- making a group two-dimensional.
-
- Beneath the layout issues, a group object passes
- attributes and methods through to all of its
- children. Thus, you can talk and listen to any
- child of a group by talking and listening to the
- group itself.
- Group.mui/MUIA_Group_ActivePage
-
- NAME
- MUIA_Group_ActivePage -- (V5 ) [ISG], LONG
-
- SPECIAL INPUTS
- MUIV_Group_ActivePage_First
- MUIV_Group_ActivePage_Last
- MUIV_Group_ActivePage_Prev
- MUIV_Group_ActivePage_Next
- MUIV_Group_ActivePage_Advance
-
- FUNCTION
- Set (or get) the active page of a page group.
- Only this active page is displayed, all others
- are hidden.
-
- The value may range from 0 (for the first child)
- to numchildren-1 (for the last child). Children are
- adressed in the order of creation:
-
- PageGroup,
- Child, Page_0_Object,
- Child, Page_1_Object,
- Child, Page_2_Object,
- Child, Page_3_Object,
- End;
-
- Note: You may *never* supply an incorrect page value!
-
- SEE ALSO
- MUIA_Group_PageMode
- Group.mui/MUIA_Group_Child
-
- NAME
- MUIA_Group_Child -- (V4 ) [I..], Object *
-
- FUNCTION
- You supply a pointer to a previously created MUI object
- here. This object will be treated as child of the group,
- the group is responsible for positioning the object.
-
- Of course you can specify any number of child objects,
- limited only by available memory.
-
- Normally, the value for a MUIA_Group_Child tag is
- a direct call to another MUI_NewObject(), children
- are generated "on the fly".
-
- When a group is disposed, all of its children will also
- get deleted. If you supply a NULL pointer as child,
- the group object will fail and previously dispose all
- valid children found in the taglist.
-
- This behaviour makes it possible to generate a complete
- application within one single (but long) MUI_NewObject()
- call. Error checking is not necessary since every error,
- even if it occurs in a very deep nesting level, will
- cause the complete call to fail without leaving back
- any previously created object.
-
- EXAMPLES
- Please have a look at some of the supplied example
- programs.
-
- SEE ALSO
- MUIA_Group_Horiz
- Group.mui/MUIA_Group_ChildList
-
- NAME
- MUIA_Group_ChildList -- (V4 ) [..G], struct List *
-
- FUNCTION
- This attribute returns a pointer to a struct List in which
- a group manages its children.
-
- The only thing you are allowed to do with this list is
- to traverse through the children. You *must* use
- intuition.library/NextObject() for this purpose!
-
- Never add or remove member directly, use the
- OM_ADDMEMBER/OM_REMMEMBER methods instead!
-
- SEE ALSO
- MUIA_Group_Child
- Group.mui/MUIA_Group_Columns
-
- NAME
- MUIA_Group_Columns -- (V4 ) [IS.], LONG
-
- FUNCTION
- Indicate number of columns in a two dimensional group.
- If you use this tag, the total number of children must
- be dividable by the number of columns.
-
- The children will be positioned in a two dimensional
- array, e.g. allowing easy creation of button fields
- (maybe for calculator).
-
- The children in your taglist are always read line
- by line.
-
- When MUI layouts two-dimensional groups, it does
- actually two layout calculations, one for the rows
- and one the columns. Parameters like weights and
- dimensions are handled this way:
-
- - the minimum width of a column/row is the maximum
- minimum width of all objects in this column/row.
-
- - the maximum width of a column/row is the minimum
- maximum width of all objects in this column/row.
-
- - the weight of a column/row is the sum of all
- objects in this column/row.
-
- Actually, there is no difference if you use
- MUIA_Group_Columns or MUIA_Group_Rows.
-
- EXAMPLE
-
- /* group of labeled string gadgets */
-
- GroupObject,
- MUIA_Group_Columns, 2,
- MUIA_Group_Child , label1,
- MUIA_Group_Child , string1,
- MUIA_Group_Child , label2,
- MUIA_Group_Child , string2,
- MUIA_Group_Child , label3,
- MUIA_Group_Child , string3,
- ...
- End;
-
- SEE ALSO
- MUIA_Group_Rows, MUIA_Group_Horiz
- Group.mui/MUIA_Group_Horiz
-
- NAME
- MUIA_Group_Horiz -- (V4 ) [I..], BOOL
-
- FUNCTION
- Boolean value to indicate whether the objects in
- this group shall be layouted horizontally or
- vertically. Defaults to FALSE.
-
- This is the easy way of telling your group how
- it has to look like. If you want two-dimensional
- groups, you have to use MUIA_Group_Columns
- or MUIA_Group_Rows.
-
- EXAMPLE
- GroupObject,
- MUIA_Group_Horiz, TRUE,
- MUIA_Group_Child, obj1,
- MUIA_Group_Child, obj2,
- MUIA_Group_Child, obj3,
- End;
-
- SEE ALSO
- MUIA_Group_Columns, MUIA_Group_Rows, MUIA_Group_Child
- Group.mui/MUIA_Group_HorizSpacing
-
- NAME
- MUIA_Group_HorizSpacing -- (V4 ) [ISG], LONG
-
- FUNCTION
- Number of pixels to be inserted between horizontal
- elements of a group.
-
- Please use this tag wisely, you will override the
- user's prefered default setting!
-
- SEE ALSO
- MUIA_Group_Spacing, MUIA_Group_VertSpacing
- Group.mui/MUIA_Group_LayoutHook
-
- NAME
- MUIA_Group_LayoutHook -- (V11) [I..], struct Hook *
-
- FUNCTION
- Since version 11 of muimaster.library, you have the
- ability to customize the way objects are placed in a
- group. Altough MUI features a very powerful builtin
- layout algorithm which serves well for almost all
- GUI related purposes, it might sometimes become
- handy to override this with custom code.
-
- Imagine you want to build a multimedia document
- viewer which contains text objects, bitmap objects
- and buttons. An easy way for doing this is to simply
- create a sub class of group class which contains all
- the documents elements as MUI objects and which
- specifies a custom layout hook for the parent group.
- This hook is then responsible for placing the
- objects within the bounds of the parent group.
-
- As soon as you specify a MUIA_Group_LayoutHook, the
- builtin layout calculation is skipped and your hook
- is called whenever MUI needs some information.
- Register A2 will contain a pointer to the parent
- group object and register A1 will contain a pointer
- to a struct MUI_LayoutMsg. The lm_Type field of
- this structure determines which kind of action MUI
- wants you to perform (see below), the lm_Children
- field is a pointer to a list of your groups
- children. By traversing through list list with the
- intuition function NextObject(), you can retrieve
- the children of the group.
-
- If lm_Type == MUILM_ASKMINMAX, MUI wants you to
- calculate your groups minimum, maximum and default
- sizes. At this time, the children of your group have
- already been asked for their dimensions. This allows
- you to traverse through the list of children and do
- some calculations depending on their min/max sizes.
- Use the macros _minwidth(child), _maxwidth(child),
- _minheight(child), _maxheight(child) for this
- purpose. Place the result of your calculations in
- the structure lm_MinMax of the MUI_LayoutMsg and
- exit your hook with a return value of 0.
-
- If lm_Type == MUILM_LAYOUT, MUI has already placed
- the group object somewhere in a window and now wants
- you to place the children of this group. You have to
- traverse through the child list and calculate
- positions and sizes for each child. Use the function
- MUI_Layout() to tell the child where it should
- appear. You have to make sure that you don't place
- child objects outside of the parent group and you
- should generally avoid overlapping objects. Return
- TRUE if all children are placed, return FALSE if you
- were for some reasons unable to place your children.
-
- If your previous min/max calculations were correct,
- your algorithms should not have problems to place
- all the children in the rectangle defined by the
- parent group. Its size will never be smaller as your
- specified minimum dimensions and never be larger as
- your specified maximum dimensions.
-
- If your group is a virtual group, the width
- and height your layout hook receives are as big as
- the *visible* part of the virtual group. In this
- case, you are allowed to position your objects
- outside of the visible part, i.e. you are not
- limited to keep your objects inside the given width
- and height. Place them where you wish and set
- lm_Layout.Width and lm_Layout.Height to the width
- and height you really need for your objects before
- exiting. The virtual width and height of your group
- will be adjusted accordingly.
-
- EXAMPLE
- see MUI demo program Layout.c
-
- SEE ALSO
- muimaster.library/MUI_Layout()
- Group.mui/MUIA_Group_PageMode
-
- NAME
- MUIA_Group_PageMode -- (V5 ) [I..], BOOL
-
- FUNCTION
- Settings this attribute to TRUE makes the current group a page
- group. Page groups always display only one of their children,
- which one can be adjusted with the MUIA_Group_ActivePage
- attribute.
-
- Imagine you have a preferences window with several different
- pages, e.g. the MUI preferences with object, frame, image,
- font, screen, keyboard and system prefs. Instead of one
- separate window for each group, you could put all pages into
- one page group and have a cycle gadget for page switching.
- This will make your program easier to use since the user
- won't have to handle a lot of windows. However, he will not
- be able to work with more than one page at the same time.
-
- Sizes are calculated as follows:
-
- The minimum width/height of a page group is the maximum
- minimum width/height of all its children.
-
- The maximum width/height of a page group is the minimum
- maximum width/height of all its children.
-
- When the maximum width/height of a child in a page group is
- smaller than the minimum width/height of the page group
- (since it contains another child with big minimum width/height),
- the child be centered.
-
- Page groups are not limited in depth, children of a page
- group may of course be other page groups.
-
- If you want to have a gadget only visible under certain
- conditions, you could make a page group containing this
- gadget and an empty rectangle object.
-
- If you want TAB cycling for the objects in a page group,
- simply include all objects in the cycle chain (as if
- they all were visible at the same time).
-
- EXAMPLE
- demo program "Pages.c"
-
- SEE ALSO
- MUIA_Group_ActivePage
- Group.mui/MUIA_Group_Rows
-
- NAME
- MUIA_Group_Rows -- (V4 ) [IS.], LONG
-
- FUNCTION
- Indicate number of rows in a two dimensional group.
- If you use this tag, the total number of children must
- be dividable by the number of rows.
-
- The children will be positioned in a two dimensional
- array, e.g. allowing easy creation of button fields
- (maybe for calculator).
-
- The children in your taglist are always read line
- by line.
-
- When MUI layouts two-dimensional groups, it does
- actually two layout calculations, one for the rows
- and one the columns. Parameters like weights and
- dimensions are handled this way:
-
- - the minimum width of a column/row is the maximum
- minimum width of all objects in this column/row.
-
- - the maximum width of a column/row is the minimum
- maximum width of all objects in this column/row.
-
- - the weight of a column/row is the sum of all
- objects in this column/row.
-
- Actually, there is no difference if you use
- MUIA_Group_Columns or MUIA_Group_Rows.
-
- SEE ALSO
- MUIA_Group_Columns, MUIA_Group_Horiz
- Group.mui/MUIA_Group_SameHeight
-
- NAME
- MUIA_Group_SameHeight -- (V4 ) [I..], BOOL
-
- FUNCTION
- Boolean value to indicate that all children of this
- group shall have the same height.
-
- BUGS
- Up to version 5 of groupclass, using MUIA_Group_SameHeight
- could make objects larger than their maximum height. This
- has been fixed for version 6.
-
- SEE ALSO
- MUIA_Group_SameSize, MUIA_Group_SameWidth
- Group.mui/MUIA_Group_SameSize
-
- NAME
- MUIA_Group_SameSize -- (V4 ) [I..], BOOL
-
- FUNCTION
- This is a shorthand for MUIA_Group_SameWidth and
- MUIA_Group_SameHeight, it sets both of these
- attributes at once.
-
- Using MUIA_Group_SameSize, you won't need to think
- if your group is horizontal or vertical, both
- cases are handled automatically.
-
- Forcing all objects of a group to be the same size
- is e.g. useful for a row of buttons. It's visually
- more attractive when these buttons have equal sizes
- instead of being just as big as the text within.
-
- BUGS
- Up to version 5 of groupclass, using MUIA_Group_SameSize
- could make objects larger than their maximum size. This
- has been fixed for version 6.
-
- EXAMPLE
-
- /* three buttons, same size */
-
- GroupObject,
- MUIA_Group_Horiz , TRUE,
- MUIA_Group_SameSize, TRUE,
- MUIA_Group_Child , but1,
- MUIA_Group_Child , but2,
- MUIA_Group_Child , but3,
- End;
-
- SEE ALSO
- MUIA_Group_SameWidth, MUIA_Group_SameHeight
- Group.mui/MUIA_Group_SameWidth
-
- NAME
- MUIA_Group_SameWidth -- (V4 ) [I..], BOOL
-
- FUNCTION
- Boolean value to indicate that all children of this
- group shall have the same width.
-
- BUGS
- Up to version 5 of groupclass, using MUIA_Group_SameWidth
- could make objects larger than their maximum width. This
- has been fixed for version 6.
-
- SEE ALSO
- MUIA_Group_SameSize, MUIA_Group_SameHeight
- Group.mui/MUIA_Group_Spacing
-
- NAME
- MUIA_Group_Spacing -- (V4 ) [IS.], LONG
-
- FUNCTION
- This is a shorthand for MUIA_Group_HorizSpacing and
- MUIA_Group_VertSpacing, it sets both of these
- attributes at once.
-
- Using MUIA_Group_Spacing, you won't need to think
- if your group is horizontal or vertical, both
- cases are handled automatically.
-
- Note that setting a spacing value for a group
- overrides the user's default settings. Please
- use it only if you have a good reason.
-
- EXAMPLE
-
- /* no space between obj1 and obj2: */
-
- GroupObject,
- MUIA_Group_Horiz , TRUE,
- MUIA_Group_Spacing, 0,
- MUIA_Group_Child , obj1,
- MUIA_Group_Child , obj2,
- End;
-
- SEE ALSO
- MUIA_Group_HorizSpacing, MUIA_Group_VertSpacing
- Group.mui/MUIA_Group_VertSpacing
-
- NAME
- MUIA_Group_VertSpacing -- (V4 ) [ISG], LONG
-
- FUNCTION
- Number of pixels to be inserted between vertical
- elements of a group.
-
- Please use this tag wisely, you will override the
- user's prefered default setting!
-
- SEE ALSO
- MUIA_Group_Spacing, MUIA_Group_HorizSpacing
- Group.mui/MUIM_Group_ExitChange
-
- NAME
- MUIM_Group_ExitChange (V11)
-
- SYNOPSIS
- DoMethod(obj,MUIM_Group_ExitChange,);
-
- FUNCTION
- Terminates MUIM_Group_InitChange state.
-
- SEE ALSO
- MUIM_Group_InitChange
- Group.mui/MUIM_Group_InitChange
-
- NAME
- MUIM_Group_InitChange (V11)
-
- SYNOPSIS
- DoMethod(obj,MUIM_Group_InitChange,);
-
- FUNCTION
- Prepares a group for dynamic adding/removing of objects.
- MUI 3 offers the possibility to dynamically add/remove
- children from groups, even when the window that contains
- these objects is currently open. To be able to do this,
- you must first put the group into a special "exchange"
- state by using this method. Then, you can add/remove
- children at will. If you're done, use MUIM_Group_ExitChange
- to make MUI recalculate the display.
-
- RESULT
- returns NULL on failure.
-
- EXAMPLE
- /* remove two children, add another one */
-
- if (DoMethod(group,MUIM_Group_InitChange))
- {
- DoMethod(group,OM_REMMEMBER,somechild);
- DoMethod(group,OM_REMMEMBER,somechild2);
-
- DoMethod(group,OM_ADDMEMBER,somenewchild);
-
- DoMethod(group,MUIM_Group_ExitChange);
- }
-
- SEE ALSO
- MUIM_Group_InitChange
- Group.mui/MUIM_Group_Sort
-
- NAME
- MUIM_Group_Sort (V4 )
-
- SYNOPSIS
- DoMethod(obj,MUIM_Group_Sort,Object *obj[1]);
-
- FUNCTION
- This method rearranges the order of the children stored in
- a group object.
-
- INPUTS
- - all objects of the group, terminated by NULL.
-
- RESULT
- The result value is currently undefined.
-
- NOTES
- You must always pass all objects of your group!
-
- EXAMPLE
- hgr = HGroup,
- Child, o1 = ...,
- Child, o2 = ...,
- Child, o3 = ...,
- Child, o4 = ...,
- End;
-
- DoMethod(hgr,MUIM_Group_Sort,o4,o3,o2,o1,NULL);
-